home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gigarom 1
/
Gigarom Macintosh Archives (Quantum Leap)(CDRM1080320)(1993).iso
/
FILES
/
DEV
/
A-B
/
Alpha.5.05.cpt
/
procs.tcl
< prev
next >
Wrap
Text File
|
1992-09-06
|
25KB
|
1,108 lines
# 'pete' is used in the rest of the file to determine if this is we
# are sitting on someone else's disk.
set pete [expr [file exists "External:C:Alpha:Alpha"]?1:0]
set Tcl [expr {$pete ? {External:C:Tcl 6.2} : "$HOME"}]
#===============================================================================================
# Appends all the 'noGlobNecessary' elements with globs of 'globNecessary' elements to create
# the penultimate list file sets. Also calls Alpha and tells it the new list of file set names.
# It is easy to create large filesets by using the 'glob' Tcl command. All that is really
# necessary is to provide Alpha with a list of fileset names and a way to retrieve the contents
# of a given fileset.
#===============================================================================================
if ($pete) {
set globNecessary {
{MIncludes "External:C:THINK C 5.0 Folder:Mac #includes:Apple #includes:*.h"}
{Edit "$HOME:EditSource:*.c"}}
set noGlobNecessary {
{ Alpha
"$HOME:EditSource:emacs.c"
"$HOME:EditSource:dir.c"
"$HOME:EditSource:alloca.c"
"$HOME:EditSource:bindings.c"
"$HOME:EditSource:command.c"
"$HOME:EditSource:file_set.c"
"$HOME:EditSource:search.c"
"$HOME:EditSource:text.c"
"$HOME:EditSource:undo.c"
"$HOME:EditSource:varargs.c"
"$HOME:EditSource:windows.c"
"$HOME:EditSource:dirT.c"
"$HOME:EditSource:frills.c"
"$HOME:EditSource:io.c"
"$HOME:EditSource:key.c"
"$HOME:EditSource:localTcl.c"
"$HOME:EditSource:moreTcl.c"
"$HOME:EditSource:shell.c"
"$HOME:EditSource:main.c"
"$HOME:EditSource:misc.c"
"$HOME:EditSource:options.c"
"$HOME:EditSource:port.c"
"$HOME:EditSource:redraw.c"
"$HOME:EditSource:alfRegexp.c"
"$HOME:EditSource:wmanager.c"
"$Tcl:panic.c"
"$Tcl:tclMac.c"
"$Tcl:tclMacUtil.c"
"$Tcl:tclAssem.c"
"$Tcl:tclBasic.c"
"$Tcl:tclCkalloc.c"
"$Tcl:tclCmdAH.c"
"$Tcl:tclCmdIL.c"
"$Tcl:tclCmdMZ.c"
"$Tcl:tclEnv.c"
"$Tcl:tclExpr.c"
"$Tcl:tclGet.c"
"$Tcl:tclGlob.c"
"$Tcl:tclHash.c"
"$Tcl:tclHistory.c"
"$Tcl:tclParse.c"
"$Tcl:tclProc.c"
"$Tcl:tclUnixAZ.c"
"$Tcl:tclUnixStr.c"
"$Tcl:tclUnixUtil.c"
"$Tcl:tclUtil.c"
"$Tcl:tclVar.c"
}
}
} else {
set globNecessary {
{HomeDir "$HOME:*"}
{Help "$HOME:Help:*"}
}
set noGlobNecessary {
{ AlternateHome
"$HOME:AlphaBits.tcl"
"$HOME:procs.tcl"}
{ AlternateHelp
"Alpha Help"
"Alpha Tcl Extensions"
"Debugging"
"keyboard.tex"
"LaTeX Keys"
"Regular Expressions"
"Shells"
"Tcl"
"Tickle"
}
}
}
# This list takes a string and returns the string w/ all occurances
# of the variable 'HOME' substituted. To work this trick w/ other
# variables, just declare them as global in the following.
# This routine creates the final fileset list from 'globNecessary'
# 'noGlobNecessary'. Typically only run at startup.
proc expandFileSets {} {
global fileSets
global globNecessary
global noGlobNecessary
uplevel #0 {set globNecessary [substituteVars $globNecessary]}
uplevel #0 {set noGlobNecessary [substituteVars $noGlobNecessary]}
set fileSets { }
set name [getVar currFileSet]
foreach item $globNecessary {
lappend fileSets [linsert [glob [lindex $item 1]] 0 [lindex $item 0]]
lappend names [lindex $item 0]
}
foreach item $noGlobNecessary {
lappend fileSets $item
lappend names [lindex $item 0]
}
eval [linsert $names 0 setFSets ]
}
if {[catch expandFileSets]} {alertnote "Fileset expansion went wrong."}
# Called from Alpha to get list of files for current file set.
proc getCurrFileSet {} {
global fileSets
set name [getVar currFileSet]
foreach set $fileSets {
if {$name == [lindex $set 0]} {
return [lrange $set 1 end]
}
}
error "Unable to find valid file set!"
}
#=============================================================================
# "Electric" C functions.
#=============================================================================
# First, define macros to bypass the electric braces.
proc ordLeftBrace {} {
insertText "\{"
}
bind {'['} <cs> ordLeftBrace
proc ordRightBrace {} {
insertText "\}"
blink [matchIt "\}" [expr [getPos]-1]]
}
bind {']'} <cs> ordRightBrace
# returns the indent string of the line named by 'pos'
proc indentString pos {
set start [lineStart $pos]
set end [nextLineStart $pos]
set text [getText $start $end]
for {set i 0} {1} {incr i} {
set c [string index $text $i]
if {($c != "\ ") && ($c != "\t")} then {
return [string range $text 0 [expr $i-1]]
}
}
return
}
# Assumes before/after match, we start with a depth of 1. Only searches 1000
# chars.
proc matchIt {brace pos} {
global depth
case $brace in {
"\{" {set match "\}"; set for 1}
"\}" {set match "\{"; set for 0}
"\[" {set match "\]"; set for 1}
"\]" {set match "\]"; set for 0}
"\(" {set match "\)"; set for 1}
"\)" {set match "\("; set for 0}
default {
beep
message "Can't match '" $brace "'"
}
}
if {$for == 1} then {
setVar forward 1;
set add 1;
set end [expr [getPos]+1000]
if {$end > [maxPos]} {set end [maxPos]}
} else {
setVar forward 0;
set add -1;
set end [expr [getPos]-1000]
if {$end < -1} {set end -1;}
}
set depth 1
set str "($brace|$match)"
setVar regExpr 1
setVar matchWords 0
while {1} {
if {[catch {search $str $pos $end} limits] != 0} {
message "Not matched 1"
beep
return
}
set pos [lindex $limits 0]
set c [lookAt $pos]
if {$c == $brace} {
incr depth
}
if {$c == $match} {
if {[set depth [expr $depth-1]] == 0} {
return $pos
}
}
set pos [expr $pos+$add]
}
}
# Brace on new line, same indentation. Insert on another new line, indented in.
# First, see if we are on new line.
proc electricCLeft {} {
deleteText [getPos] [selEnd]
if {[getVar elecLBrace] == "0"} then {
insertText "\{"
return
}
set pos [getPos]
set start [lineStart $pos]
set text [getText $start $pos]
for {set i $start} {$i < $pos} {incr i} {
set c [lookAt $i]
if {($c != "\ ") && ($c != "\t")} then {
set indentation [getText $start $i]
insertText "\r" $indentation "\{\r" $indentation "\t"
return
}
}
set indentation [getText $start $pos]
insertText "\{\r" $indentation "\t"
}
bind '\{' <s> electricCLeft
# Brace on new line, immediate carriage return
proc electricCRight {} {
deleteText [getPos] [selEnd]
if {[getVar elecRBrace] == "0"} then {
insertText "\}"
blink [matchIt "\}" [expr [getPos]-2]]
return
}
set pos [getPos]
set start [lineStart $pos]
set text [getText $start $pos]
for {set i $start} {$i < $pos} {incr i} {
set c [lookAt $i]
if {($c != "\ ") && ($c != "\t")} then {
set indentation [getText $start [expr $i-1]]
insertText "\r" $indentation "\}\r" $indentation
blink [matchIt "\}" [expr $pos-1]]
return
}
}
if {$start == $pos} {
set indentation ""
} else {
set indentation [getText $start [expr $i-1]]
}
deleteText $start $pos
insertText $indentation "\}\r" $indentation
blink [matchIt "\}" [expr $start-2]]
}
bind '\}' <s> electricCRight
# Brace on new line, immediate carriage return. We don't do our electric stuff
# if we are in the middle of a for statement.
proc electricCSemi {} {
deleteText [getPos] [selEnd]
if {[getVar electricSemi] == "0"} then {
insertText ";"
return
}
set pos [getPos]
set start [lineStart $pos]
set text [getText $start $pos]
if {[string first "for" $text] != "-1"} {
set lefts 0
set rights 0
set len [string length $text]
for {set i 0} {$i < $len} {incr i} {
case [string index $text $i] in {
"(" { incr lefts }
")" { incr rights }
}
}
global globs
set globs [list $lefts $rights $len]
if {$lefts != $rights} {
insertText ";"
return
}
}
insertText ";\r" [indentString $pos]
}
bind '\;' electricCSemi
#==============================================================================
proc normalLeftBracket {} {
insertText "\{"
}
proc normalRightBracket {} {
insertText "\}"
}
bind '\[' <zs> normalLeftBracket
bind '\]' <zs> normalRightBracket
#==============================================================================
# Select the next or current word. If word already selected, will go to next.
proc hiliteWord {} {
forwardChar
forwardWord
set start [getPos]
backwardWord
select $start [getPos]
}
bind 'h' <z> hiliteWord
# ================================================================================
# Simple mark stack implementation
# ================================================================================
set markName 0
set markStack ""
proc pushMark {} {
global markStack
global markName
set name mark$markName
incr markName
createTMark $name [getPos]
set fileName [lindex [winNames] 0]
set markStack [linsert $markStack 0 [list $fileName $name]]
message "Mark Pushed"
}
proc popMark {} {
global markStack
if {[llength $markStack] == "0"} {
alertnote "The mark stack is empty!"
return
}
set mark [lindex [lindex $markStack 0] 1]
set markStack [lreplace $markStack 0 0]
gotoTMark $mark
message "Mark Popped"
}
# Returns 'list' minus all top-level elements matching 'pat'.
# Used in 'closeHooks' to prune the mark stack.
proc removePat {list pat} {
while 1 {
set ind [lsearch $list $pat]
if {$ind == "-1"} {return $list}
set list [lreplace $list $ind $ind]
}
}
#=============================================================================
# Hook procs recognized: "openHook", "closeHook", "activateHook", "deactivateHook",
# "suspendHook", and "resumeHook".
#=============================================================================
# Suffix hooks - set specific modes when files opened.
proc openHook name {
activateHook $name
}
# Clean up the mark stack.
proc closeHook name {
global markStack
set markStack [removePat $markStack $name*]
}
proc activateHook name {
case $name in {
"*.c" setCMode
"*.h" setCMode
"*.f" setFortranMode
"*.tcl" setTclMode
{*tcl\ sh*} setShellMode
"*.tex" setTexMode
default setTextMode
}
}
proc deactivateHook name {
}
proc suspendHook name {
}
proc resumeHook name {
}
#=============================================================================
# Load LaTeX definitions
#=============================================================================
# Comment this line out if you want to use LaTeX macros.
set lastMode 0
set usingLatex 1
if {$usingLatex} {source "$HOME:latex.tcl"}
# rta Creating texWasLast variable
set texWasLast 0
# rta Following changed from ThinkC to MPW
proc switchToMPW {} {
switchTo {MPW Shell}
}
# Modes
# 'C' programming mode
proc setCMode {} {
global modeItemNum
changeMode "C"
insertMenu "C"
setVar elecLBrace 1
setVar elecRBrace 1
setVar electricSemi 1
setVar wordWrap 0
setVar funcExpr {^[^ \t\(#\r/@].*\(.*\)$}
setVar sortedIsDefault 1
setVar funcTitle "Func"
hiliteMenuItem Misc $modeItemNum on
set modeItemNum 7
hiliteMenuItem Misc $modeItemNum off
}
# Fortran programming mode
proc setFortranMode {} {
global modeItemNum
changeMode "Fort"
setVar elecLBrace 0
setVar elecRBrace 0
setVar electricSemi 0
setVar wordWrap 0
setVar funcExpr {^( |\t)(subroutine|function|SUBROUTINE|FUNCTION).*\([^\r]*\)$}
setVar sortedIsDefault 0
setVar funcTitle "Func"
hiliteMenuItem Misc $modeItemNum on
set modeItemNum 8
hiliteMenuItem Misc $modeItemNum off
}
# Alpha TCL programming mode
proc setTclMode {} {
global texWasLast
global modeItemNum
changeMode "Tcl"
setVar elecLBrace 0
setVar elecRBrace 0
setVar electricSemi 0
setVar wordWrap 0
setVar funcTitle "Proc"
setVar funcExpr {^proc *([a-zA-Z0-9-]*)}
setVar funcPar 1
setVar sortedIsDefault 1
hiliteMenuItem Misc $modeItemNum on
set modeItemNum 10
hiliteMenuItem Misc $modeItemNum off
}
# Only for the shell.
proc setShellMode {} {
setTclMode
global modeItemNum
hiliteMenuItem Misc $modeItemNum on
set modeItemNum 9
hiliteMenuItem Misc $modeItemNum off
changeMode Csh
}
proc switchToOztex {} {
switchTo {OzTeX}
}
# LaTeX mode
proc setTexMode {} {
global modeItemNum
global usingLatex
changeMode "Tex"
setVar elecLBrace 0
setVar elecRBrace 0
setVar electricSemi 0
setVar wordWrap 1
setVar fillColumn 75
set prefixString "% "
bind '0x79' nextSection
bind '0x74' prevSection
setVar funcTitle "Sect"
setVar sortedIsDefault 0
setVar funcExpr {^\\(sub)*section{(.*)}$}
setVar funcPar 2
hiliteMenuItem Misc $modeItemNum on
set modeItemNum 11
hiliteMenuItem Misc $modeItemNum off
if {$usingLatex} {
setVar optionIsMeta 0
bindTexKeys
insertMenu "LaTeX"
}
}
# Ordinary, default mode
proc setTextMode {} {
global modeItemNum
changeMode "Text"
setVar elecLBrace 0
setVar elecRBrace 0
setVar electricSemi 0
setVar wordWrap 1
setVar fillColumn 75
set prefixString "> "
set suffixString " <--"
hiliteMenuItem Misc $modeItemNum on
set modeItemNum 12
hiliteMenuItem Misc $modeItemNum off
}
proc changeMode {newMode} {
global lastMode
if {$lastMode == $newMode} {
displayMode $newMode
return
}
if {$lastMode == "Tex"} then {
global usingLatex
if {$usingLatex} then {
removeMenu "LaTeX"
setVar optionIsMeta 1
unbindTexKeys
}
} else {
if {$lastMode == "C"} {
removeMenu "C"
}
}
global mode
set mode $newMode
displayMode $newMode
set lastMode $newMode
}
proc unsetTexMode {} {
global texWasLast
global usingLatex
if {$usingLatex} {
removeMenu "LaTeX"
setVar optionIsMeta 1
unbindTexKeys
}
set texWasLast 0
}
#=============================================================================
# 'Strings' commands
#=============================================================================
set prefixString ">\ "
set suffixString "\ <--"
proc insertSuffix {} {doSuffix insert}
proc removeSuffix {} {doSuffix remove}
proc doSuffix {which} {
global suffixString
set str ${suffixString}\r
set start [getPos]
set end [selEnd]
set start [lineStart $start]
set end [nextLineStart [expr $end-1]]
set text [getText $start $end]
deleteText $start $end
if {$which == "insert"} then {
regsub -all \r $text $str text
} else {
regsub -all $str $text \r text
}
insertText $text
}
proc insertPrefix {} {doPrefix insert}
proc removePrefix {} {doPrefix remove}
proc doPrefix {which} {
global prefixString
set str \r$prefixString
set start [getPos]
set end [expr [selEnd]-1]
if {$end<$start} {set end $start}
set start [lineStart $start]
set text [getText $start $end]
deleteText $start $end
if {$which == "insert"} then {
regsub -all \r $text $str text
insertText $prefixString $text
} else {
regsub -all $str $text \r text
regsub ^$prefixString $text "" text
insertText $text
}
}
#=============================================================================
# Named Clipboards
#=============================================================================
proc copyNamedClipboard {} {
global clipBoards
global pasteItemNum
hiliteMenuItem Misc $pasteItemNum on
set text [getText [getPos] [selEnd]]
set name [prompt {Clip name?} [lindex $text 0]]
if {![string length $name]} then {
beep
} else {
set clipBoards($name) $text
}
}
proc cutNamedClipboard {} {
global clipBoards
global pasteItemNum
hiliteMenuItem Misc $pasteItemNum on
set text [getText [getPos] [selEnd]]
deleteText [getText [getPos] [selEnd]]
set name [prompt {Clip name?} [lindex $text 0]]
if {![string length $name]} then {
beep
} else {
set clipBoards($name) $text
}
}
proc pasteNamedClipboard {} {
global clipBoards
set name [eval [concat {prompt {Clip name?} "" Clips} [array names clipBoards]]]
if {[catch {set text $clipBoards($name)}] == 0} {
insertText $text
} else {
alertnote "Unable to find that clipboard"
}
}
# Looks for definition of clipboard named 'name'.
proc lookForClip {name} {
global clipBoards
set len = 2
for {set i 0} {$i < $len} {incr i} {
if {[lindex $clip 0] == $name} {
return [lindex $clip 2]
}
}
return ""
}
#=============================================================================
# Shell Aliases
#=============================================================================
proc l {args} {
eval [concat "ls -F" $args]}
proc ll {args} {
eval [concat "ls -l" $args]}
proc grep {pat args} {
insertText "\r"
set pat *$pat*
set args [glob -nocomplain $args]
foreach file $args {
set id [open $file]
while {[gets $id string] != "-1"} {
if {[string match $pat $string] == 1} {
insertText $file: $string "\r"
}
}
close $id
}
}
proc alphaHelp {} {
global HOME
edit "$HOME:Help:Alpha Help" readonly
}
#=============================================================================
# 'Fill' routines.
#=============================================================================
proc fillParagraph {} {
set pos [getPos]
set start [paraStart $pos]
set finish [paraFinish $pos]
goto $start
set text [fillText $start $finish]
replaceText $start $finish $text "\r"
}
proc fillRegion {} {
set start [getPos]
set finish [selEnd]
goto $start
set text [fillText $start $finish]
replaceText $start $finish $text "\r"
}
proc wrapParagraph {} {
set pos [getPos]
set start [paraStart $pos]
set finish [paraFinish $pos]
goto $start
wrapText $start $finish
}
proc wrapRegion {} {
set start [getPos]
set finish [selEnd]
if {$start == $finish} {
set finish [maxPos]
}
wrapText $start $finish
}
proc paraStart {pos} {
while {$pos > 0} {
set pos [lineStart $pos]
if {[lookAt [expr $pos-2]] == "\r"} {return $pos}
set pos [expr $pos-1]
}
return 0
}
proc paraFinish {pos} {
set end [maxPos]
while {$pos < $end} {
set pos [nextLineStart $pos]
if {$pos == "-1"} {return $end}
if {[lookAt $pos] == "\r"} {return $pos}
}
return $end
}
# Remove text from window, transform, and insert back into window.
proc fillText {from to} {
# Get The text
set text [getText $from $to]
# Remove duplicated white space, carriage returns.
regsub -all "\[ \t\r\]+" $text " " text
# Insert left margins and carriage returns, doesn't end with a carriage return.
return [breakIntoLines $text]
}
#=============================================================================
# Window handling routines.
#=============================================================================
proc shrinkHigh {} {
set text [getGeometry]
set left [lindex $text 0]
set top [lindex $text 1]
set width [lindex $text 2]
sizeWin $width 150
moveWin $left 42
}
proc shrinkLow {} {
set text [getGeometry]
set left [lindex $text 0]
set top [lindex $text 1]
set width [lindex $text 2]
moveWin $left 330
sizeWin $width 146
}
proc nextWindow {} {
set files [winNames]
if {[llength $files] <= 1} return
sendToBack [lindex $files 0]
}
proc prevWindow {} {
set files [winNames]
set len [llength $files]
if {$len <= 1} return
bringToFront [lindex $files [expr $len-1]]
}
proc vertically {} {
set margin 22
set names [winNames]
set numWins [llength $names]
if ($numWins<=1) return
set height [expr ([getVar defHeight]/$numWins)-$margin]
set width 640
set ver 40
if {$numWins == 0} {return}
for {set i 0} {$i < $numWins} {incr i} {
moveWin [lindex $names $i] 1000 0
}
for {set i 0} {$i < $numWins} {incr i} {
sizeWin [lindex $names $i] $width $height
moveWin [lindex $names $i] 3 $ver
set ver [expr $ver+$margin+$height]
}
}
proc horizontally {} {
set names [winNames]
set numWins [llength $names]
if ($numWins<=1) return
set margin 4
set width [expr (640/$numWins)-$margin]
set height [getVar defHeight]
set hor 0
if {$numWins == 0} {return}
for {set i 0} {$i < $numWins} {incr i} {
moveWin [lindex $names $i] 1000 0
sizeWin [lindex $names $i] $width $height
}
for {set i 0} {$i < $numWins} {incr i} {
moveWin [lindex $names $i] $hor 40
set hor [expr $hor+$width+$margin]
}
}
proc tiled {} {
set xPan 8
set yPan 10
set xMarg 3
set yMarg 40
set yMax 50
set names [winNames]
set numWins [llength $names]
if ($numWins<1) return
set line 0
set height [expr [getVar defHeight]-$yPan*($numWins-1)]
set width [getVar defWidth]
for {set i 0} {$i < $numWins} {incr i} {
moveWin [lindex $names $i] [expr $xMarg+$i*$xPan] [expr $yMarg+\
$line]
set line [expr $line+$yPan]
if ($line>$yMax) {set line 0}
sizeWin [lindex $names $i] $width $height
}
}
proc overlay {} {
set names [winNames]
set numWins [llength $names]
if ($numWins<1) return
for {set i 0} {$i < $numWins} {incr i} {
moveWin [lindex $names $i] 3 40
sizeWin [lindex $names $i] [getVar defWidth] [getVar defHeight]
}
}
#=============================================================================
# Template editing, just an example. To use, load this file, hit
# control-i, and a for template will appear. Consecutive control-j's
# will step you though various fields of the for statement.
#=============================================================================
# C 'for' template
menu C {
"forTemplate"
"whileTemplate"
"(-"
"/\\nextStop"
"(-"
"findTag"
"createTagFile"}
proc forTemplate {} {
indentLine
set pos [getPos]
set indent [indentString $pos]
set str1 "for (\;\;)\r"
set str2 "\{\r"
set str3 "\t\r"
set str4 "\}\r"
insertText $str1 $indent $str2 $indent $str3 $indent $str4 $indent
set len [string length $indent]
createTMark stop1 [expr $pos+5]
createTMark stop2 [expr $pos+6]
createTMark stop3 [expr $pos+7]
set temp4 [expr { $pos + [string length $str1] + [string length $str2] +
[string length $str3] + 2 * $len - 1}]
createTMark stop4 $temp4
createTMark stop5 [expr { $temp4 + 2 * [string length $str4] + $len}]
global stopRing
set stopRing "stop1 stop2 stop3 stop4 stop5"
gotoTMark stop1
bind 'j' <z> nextStop
}
proc whileTemplate {} {
indentLine
set pos [getPos]
set indent [indentString $pos]
set str1 "while ()\r"
set str2 "\{\r"
set str3 "\t\r"
set str4 "\}\r"
insertText $str1 $indent $str2 $indent $str3 $indent $str4 $indent
set len [string length $indent]
createTMark stop1 [expr $pos+7]
set temp [expr { $pos + [string length $str1] + [string length $str2] +
[string length $str3] + 2 * $len - 1}]
createTMark stop2 $temp
createTMark stop3 [expr { $temp + 2 * [string length $str4] + $len}]
global stopRing
set stopRing "stop1 stop2 stop3"
gotoTMark stop1
bind 'j' <z> nextStop
}
proc nextStop {} {
global stopRing
set first [lindex $stopRing 0]
set stopRing [lreplace $stopRing 0 0]
set stopRing [lappend stopRing $first]
gotoTMark [lindex $stopRing 0]
}
#=============================================================================
# Random functions.
#=============================================================================
proc lineToParagraph {} {
saveVars
setVar fillColumn 10000
setVar leftFillColumn 0
fillRegion
restoreVars}
proc paragraphToLine {} {
saveVars
setVar fillColumn 75
setVar leftFillColumn 0
fillRegion
restoreVars}
proc commentBox {} {
alertnote "I haven't gotten around to this yet." }
proc uncommentBox {} {
alertnote "I haven't gotten around to this yet." }
proc transposeChars {} {
alertnote "I haven't gotten around to this yet." }
proc transposeWords {} {
alertnote "I haven't gotten around to this yet." }
proc nextFunc {} {
searchFunc 1
}
proc prevFunc {} {
searchFunc 0
}
proc searchFunc {dir} {
select [getPos]
saveVars
if ($dir==1) {
nextLine
} else {
previousLine
}
set pos [getPos]
setVar regExpr 1
setVar forward $dir
setVar ignoreCase 1
eval select [search {^[^ \t\(#\r/@].*\(.*\)$} $pos]
restoreVars
}
# Shell history commands.
source "$HOME:shell.tcl"
#===========================================================================
# Include file manipulation. - called from Alpha.
#===========================================================================
proc includeFile {} {
global includePath
global Think
set path [substituteVars $includePath]
set fname [getSelect]
if {[string last ".h" $fname]=="-1"} {
set fname ${fname}.h
}
foreach dir $path {
if {[file exists $dir$fname]} {
edit $dir$fname
return
}
}
beep
}
#===========================================================================
# Add temporary fileset.
#===========================================================================
set firstTemp 1
proc addFileset {} {
global fileSets
global firstTemp
if {$firstTemp == 1} {
if {[askyesno "This routine is flakey. Continue?"] != "yes"} return
set firstTemp 0
}
set name [getline "New fileset name:" ""]
if {![string length $name]} return
set dir [get_directory]
if {![string length $dir]} return
set filePat [getline "File pattern:" "*"]
if {![string length $filePat]} return
set newFSet [glob "$dir:$filePat"]
lappend fileSets [linsert $newFSet 0 $name]
set names {}
foreach set $fileSets {
lappend names [lindex $set 0]
}
eval [linsert $names 0 setFSets ]
}
#===========================================================================
# Comment routines.
#===========================================================================
proc commentPara {} {
}